#include <iostream>
#include <vector>
#include <cstring>
#include <algorithm>
#include <stack>
using namespace std;
const int N=110;

int scc_cnt,id[N];
int dfn[N],low[N],timestamp;
int in_stk[N];
vector<int> edge[N];
int n;
stack<int> st;
int din[N],dout[N];
void tarjan(int u)
{
	dfn[u]=low[u]=++timestamp;
	st.push(u);
	in_stk[u]=true;
	for(auto& e:edge[u])
	{
		if(!dfn[e])
		{
			tarjan(e);
			low[u]=min(low[u],low[e]);
		}
		else if(in_stk[e])
		{
			low[u]=min(low[u],dfn[e]);
		}
	}
	if(dfn[u]==low[u])
	{
		int t;
		++scc_cnt;
		do{
			t=st.top();
			in_stk[t]=false;
			st.pop();
			id[t]=scc_cnt;
		}while(t!=u);
	}
}
int main()
{
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		int t;
		while(cin>>t,t)
		{
			edge[i].push_back(t);
		}
	}
	
	for(int i=1;i<=n;i++)
		if(!dfn[i])
			tarjan(i);
	
	for(int i=1;i<=n;i++)
	{
		for(int& j:edge[i])
		{
			int a=id[i],b=id[j];
			if(a!=b)
			{
				din[b]++;
				dout[a]++;
			}
		}
	}	
	int a=0,b=0;
	for(int i=1;i<=scc_cnt;i++)
	{
		if(!din[i])
			a++;
		if(!dout[i])
			b++;
	}
	cout<<a<<endl;
	if(scc_cnt==1)
		cout<<0<<endl;
	else
		cout<<max(a,b)<<endl;
		
	return 0;
}
